package com.coin900.coin.service.fu;

import com.coin900.coin.persist.fu.FuUserWalletVO;

import java.util.List;
import java.util.Map;

/**
 * @author shui
 * @create 2017-12-21
 **/
public interface IFuUserWalletService {

    /**
     * 条件查询
     *
     * @param params
     * @return
     */
    List<FuUserWalletVO> loadFuUserWallet(Map<String, Object> params);

    /**
     * 查询所有设置为在资产管理显示的币种
     * 如果用户已经有这个币种的钱包，则返回钱包的信息
     * 如果没有则返回币种 id 和币种的简称
     * <p>
     * 币种是否显示在 coin_coin 表的 show_in_wallet 进行设置
     *
     * @param params
     * @return
     */
    List<FuUserWalletVO> loadTotalWallet(Map<String, Object> params);

    /**
     * 获取用户的指定虚拟币钱包信息
     *
     * @param userId
     * @param coinId
     * @return
     */
    FuUserWalletVO getUserWallet(Long userId, Long coinId);

    void insertFuUserWallet(FuUserWalletVO fuUserWalletVO);

    void updateFuUserWallet(FuUserWalletVO fuUserWalletVO);

    void deleteFuUserWallet(FuUserWalletVO fuUserWalletVO);

    /**
     * 充值成功，balance 和 avilable 增加
     *
     * @param fuUserWalletVO
     */
    void doRechargeSuccess(FuUserWalletVO fuUserWalletVO);

    /**
     * 支付订单
     *
     * @param fuUserWalletVO
     */
    void doPayForTheOrder(FuUserWalletVO fuUserWalletVO);

    /**
     * 锁定增加
     *
     * @param fuUserWalletVO
     */
    void doIncreaseBlocked(FuUserWalletVO fuUserWalletVO);

    /**
     * 资产提现审核通过
     *
     * @param fuUserWalletVO
     */
    void doWithdrawFail(FuUserWalletVO fuUserWalletVO);

    /**
     * 资产提现支付成功
     *
     * @param fuUserWalletVO
     */
    void doWithdrawPayed(FuUserWalletVO fuUserWalletVO);

    /**
     * 总量增多
     *
     * @param fuUserWalletVO
     */
    void doIncreaseTokenBalance(FuUserWalletVO fuUserWalletVO);

    /**
     * 解锁虚拟币
     *
     * @param fuUserWalletVO
     */
    void doWallectUnBlock(FuUserWalletVO fuUserWalletVO);

    /**
     * 锁定虚拟币
     *
     * @param fuUserWalletVO
     */
    void doWallectBlock(FuUserWalletVO fuUserWalletVO);

}